package com.example.demo.程序员面试金典;

/**
 * @author：zzc
 * @date: 2022/9/7
 */
public class 一次编辑 {

    //字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。
    //输入:
    //first = "pale"
    //second = "ple"
    //输出: True

    // todo
    class Solution {

        public boolean oneEditAway(String first, String second) {
            int n1 = first.length(), n2 = second.length();
            int diff = n1 - n2;
            if (Math.abs(diff) > 1) {
                return false;
            }
            // 编辑次数
            int op = 1;
            for (int i = 0, j = 0; i < n1 && j < n2; ++i, ++j) {
                boolean notSame = first.charAt(i) != second.charAt(j);
                if (notSame) {
                    if (diff == 1) {
                        --j;
                    } else if (diff == -1) {
                        --i;
                    }
                    --op;
                }
                if (op < 0) {
                    return false;
                }

            }

            return true;

        }
    }


}
